package org.example.design.command.test2.command;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Iterator;
import java.util.Stack;

/**
 * @author huangshen
 * @version 0
 * @description 由多条命令整合成的命令
 * @since 2022/2/14 13:46
 */
public class MacroCommand implements Command {
    /**
     * 命令的集合
     */
    private final Deque<Command> commands = new ArrayDeque<>();

    /**
     * 执行
     */
    @Override
    public void execute() {
        for (Command command : commands) {
            command.execute();
        }
    }

    /**
     * 添加命令
     * @param cmd 命令
     */
    public void append(Command cmd) {
        if (cmd != this) {
            commands.push(cmd);
        }
    }

    /**
     * 删除最后一条命令
     */
    public void undo() {
        if(!commands.isEmpty()) {
            commands.pop();
        }
    }

    /**
     * 删除所有命令
     */
    public void clear() {
        commands.clear();
    }
}
